#+title: GNU Emacs III: Referencias bibliográficas y presentaciones
#+author: dlmayhem
#+email: dlmayhem@riseup.net
#+date: 2023-12-12
#+language: es
#+options: num:nil toc:nil ':t
#+bibliography: ~/Documentos/refs.bib

* Materiales

- Material del curso :: https://notabug.org/dlmayhem/emacs-hss.git
- Mi config personal :: https://notabug.org/dlmayhem/terror-emacs.git

* Contenidos

- Repaso de la sintáxis de Org
- Manejo de referencias bibliográficas
- Presentaciones

* Repaso

** Listas

*** Listas con ~-~

- Esto es un ítem.
- Esto es otro ítem.
- Cada ítem se genera con =M-ret=.

*** Listas con ~+~

+ Esto es un ítem.
+ Esto es otro ítem.
+ Cada ítem se genera con =M-ret=.

*** Listas ordenadas con ~.~

1. Esto es un ítem numerado.
2. Esto también.
3. Cada ítem se genera con =M-ret=.

*** Listas ordenadas con ~)~

1) Esto es un ítem numerado.
2) Esto también.
3) Cada ítem se genera con =M-ret=.

*** Definiciones

- Def1 :: Blablabla blabla bla.
- Def2 :: Blablabla blabla bla.
- Def3 :: Blablabla blabla bla.

** Formato de texto

- *negrita* - El texto entre * aparece resaltado.
- /cursiva/ - El texto entre / aparece enfatizado.
- _subrayado_ - El texto entre _ aparece subrayado.
- +tachado+ - El texto entre + aparece tachado.
- =código= - El texto entre = aparece como código.
- ~verbatim~ - El texto entre ~ es similar al anterior.
  
** Notas al pie

- Las notas a pie de página se insertan con el comando C-c C-x f.

** Entornos

- Con =C-c C-,= (=org-insert-structure-template=) se abre un buffer con los entornos disponibles.
- Algunos entornos comunes son:
  - c :: center
  - q :: quote
  - s :: source
  - v :: verse

** Tablas

- El modo Org soporta la creación de tablas, y permite cálculos matemáticos.
- Para crear una tabla se debe comenzar con el caracter "|".
- Ejemplo de tabla:

 | Nombre  | Teléfono |     Rut      |
 |---------+----------+--------------|
 | Ozzy    |   666666 | 12.345.678-9 | 
 | Ronnie  |   999999 | 98.765.432-1 |

- Al presionar TAB la tabla se alínea de forma automática.
- El separador horizontal se comienza con |- y luego se presiona TAB.
- Se pueden mover columnas hacia la izquierda o la derecha con M-der/izq.
- Se pueden mover filas hacia arriba o abajo con M-arriba/abajo.

** Enlaces

- Los enlaces en el modo Org llevan la siguiente sintáxis [[][]], colocando primero la URL y luego la descripción.
- Para editar el enlace se utiliza el comando C-c C-l sobre el link: [[http://gnu.org][Proyecto GNU]].
- Para dirigirse al lugar enlazado hay que posicionarse sobre el enlace y utilizar el comando C-c C-o.
- Se puede insertar un enlace automáticamente con el comando C-c C-l.

** Código fuente

- Los lenguajes disponibles se pueden revisar [[https://orgmode.org/worg/org-contrib/babel/languages/index.html][acá]]. 

#+begin_src python :results output

  x = 222
  y = 3
  z = (x * y)

  print(z)
  
#+end_src

** Listas TODO y checkboxes

   DEADLINE: <2020-07-31 vie> SCHEDULED: <2020-07-09 jue>
   - [ ] =S-izq/der= cambia el estado de la sección.
   - [X] =C-c C-c= cambia el estado del checkbox.
   - [ ] =C-c C-s= establece una fecha de inicio.
   - [X] =C-c C-d= establece una fecha de término.
   - [ ] Mostrar ejemplo
   - [ ] Ejemplo    

* Configuración básica

#+begin_src elisp

  (use-package org
    :commands (org-capture org-agenda)
    :bind (("C-c l" . org-store-link)
           ("C-c a" . org-agenda)
           ("C-c c" . org-capture))
    :config
    (setq org-agenda-files '("~/.emacs.d/agenda.org")
          org-ellipsis " ▾"
          org-footnote-auto-adjust t
          org-return-follows-link t
          org-log-done 'time
          org-capture-bookmark nil
          org-html-validation-link nil
          org-startup-indented t
          org-startup-folded nil))

#+end_src

* Org Babel

#+begin_src elisp

  (with-eval-after-load 'org
    (org-babel-do-load-languages
     'org-babel-load-languages
     '((C . t)
       (scheme . t)
       (python . t)
       (shell . t)))
    (add-hook 'org-babel-after-execute-hook 'org-redisplay-inline-images))

#+end_src

* Manejo de referencias bibliográficas

** Citar

#+begin_src elisp

  (use-package citar
    :defer t
    :bind (("C-c b" . citar-insert-citation)
           ("M-p" . citar-org-update-prefix-suffix)
           :map minibuffer-local-map
           ("M-b" . citar-insert-preset))
    :custom
    (citar-bibliography '("~/referencias.bib"))
    :hook
    (LaTeX-mode . citar-capf-setup)
    (org-mode . citar-capf-setup))
  
#+end_src

** Archivo =.bib=

- Para trabajar con Citar necesitamos una base de datos bibliográfica en formato =.bib=.
- En este ejemplo utilizaremos un archivo ubicado en nuestro directorio personal, es decir =~/referencias.bib=, pero puede ser cualquier otra que se declare en la configuración.
  
*** Libro

#+begin_src bibtex

  @book{agustin-confesiones,
    title = {Confesiones},
    author = {San Agustín},
    year = 1974,
    publisher = {BAC},
    location = {Madrid}
  }

#+end_src

*** Artículo

#+begin_src bibtex

  @article{cornford-math-dialectic-i,
    author = {Cornford, Francis Macdonald},
    journal = {Mind},
    number = {161},
    pages = {37-52},
    publisher = {[Oxford University Press, Mind Association]},
    title = {Mathematics and Dialectic in the Republic VI.-VII. (I.)},
    volume = {41},
    year = {1932}
  }

#+end_src

*** Referencia a un artículo web

#+begin_src bibtex

  @InCollection{sep-principia-mathematica,
    author       =	{Linsky, Bernard and Irvine, Andrew David},
    title        =	{{Principia Mathematica}},
    booktitle    =	{The {Stanford} Encyclopedia of Philosophy},
    editor       =	{Edward N. Zalta},
    howpublished =	{\url{https://plato.stanford.edu/archives/spr2022/entries/principia-mathematica/}},
    year         =	{2022},
    edition      =	{{S}pring 2022},
    publisher    =	{Metaphysics Research Lab, Stanford University}
  }

#+end_src

** Uso de =citar=

- Para utilizar =citar= debemos presionar el atajo =C-c b= (=citar-insert-citation=), lo que nos mostrará una lista con nuestras referencias bibliográficas utilizando =vertico=. [cite:@frege-logica]
- Seleccionamos el elemento requerido y se agregará la referencia. [cite:@clarke-descartes]
- Para que la bibliografía sea presentada correctamente al momento de exportar, debemos agregar la siguiente línea al final del documento, o en el lugar que consideremos necesario:
  
  #+begin_src

    #+print_bibliography:

  #+end_src

** Procesador de citas

- En el "preámbulo" de nuestro documento =.org= establecemos el procesador que queremos utilizar. En este ejemplo, usaremos =biblatex=:

  #+begin_src

    #+cite_export: biblatex

  #+end_src

- Otros procesadores pueden ser =basic=, =csl= y =natbib=.

* Presentaciones con y en Emacs

** Beamer

#+begin_src org

  #+cite_export: biblatex
  #+latex_compiler: xelatex
  #+latex_header: \usepackage[${1:lang}]{babel}
  #+latex_header: \usepackage{unicode-math}
  #+latex_header: \setmainfont{Linux Libertine O}
  #+latex_header: \beamertemplatenavigationsymbolsempty
  #+latex_header: \setbeamertemplate{frametitle continuation}{}
  
#+end_src

** =org-tree-slide=

#+begin_src elisp

  (use-package org-bullets
    :no-require t
    :custom
    (org-bullets-bullet-list '("◉" "●" "○" "●" "○" "●")))

  (use-package hide-lines)

  (use-package hide-mode-line
    :defer t)

  (defun terror/slide-setup ()
    (global-hl-line-mode -1)
    (setq org-hide-emphasis-markers t)
    (org-bullets-mode 1)
    (setq text-scale-mode-amount 3)
    (text-scale-mode 1)
    (set-frame-parameter (selected-frame)
                         'internal-border-width 75)
    (org-display-inline-images)
    (toggle-frame-fullscreen)
    (hide-mode-line-mode 1)
    (hide-lines-matching "#\\+begin")
    (hide-lines-matching "#\\+end"))

  (defun terror/slide-end ()
    (global-hl-line-mode 1)
    (setq org-hide-emphasis-markers nil)
    (org-bullets-mode -1)
    (setq text-scale-mode-amount 0)
    (text-scale-mode -1)
    (set-frame-parameter (selected-frame)
                         'internal-border-width 20)
    (toggle-frame-fullscreen)
    (hide-mode-line-mode -1)
    (hide-lines-show-all)
    (org-fold-show-all))

  (use-package org-tree-slide
    :after org
    :bind ("C-c p" . org-tree-slide-mode)
    :hook ((org-tree-slide-play . terror/slide-setup)
           (org-tree-slide-stop . terror/slide-end))
    :config
    (setq org-tree-slide-slide-in-effect nil
          org-image-actual-width nil
          org-tree-slide-header t
          org-tree-slide-breadcrumbs " > "
          org-tree-slide-activate-message "Let's begin..."
          org-tree-slide-deactivate-message "The end :)"))

#+end_src

* Recursos

** Lectura recomendada

- Referencias bibliográficas ::
  - [[https://amerygration.com/Blog/citation_handling_in_emacs.html][Amery Gration: Citation handling in Emacs]]
  - [[https://blog.tecosaur.com/tmio/2021-07-31-citations.html][This Month in Org: Introducing citations!]]

- Presentaciones ::
  - [[https://orgmode.org/worg/exporters/beamer/tutorial.html][Worg: Writing Beamer presentations in org-mode]]
  - [[https://orgmode.org/manual/Beamer-Export.html][The Org Manual: Beamer export]] 

* Paquetes utilizados

- [[https://github.com/emacs-citar/citar][Citar]]
- [[https://github.com/takaxp/org-tree-slide][org-tree-slide]]
- [[https://github.com/sabof/org-bullets][Org Bullets]]
- [[https://github.com/vapniks/hide-lines][hide-lines]]
- [[https://github.com/hlissner/emacs-hide-mode-line][hide-mode-line]]
  
* Próxima clase

- Org Capture
- Org Roam
- Plantillas de Org Roam

*¡Gracias por asistir!*

* Referencias

#+print_bibliography:

